//导入数据库模块
const db = require('../db/index')
//导入生成token的包
const jwt = require('jsonwebtoken')
const config = require('../config')

//注册新用户
exports.regUser = (req, res) => {
    // 获取用户提交的信息
    const userinfo = req.body;

    // 进行表单验证
    if (!userinfo.user_account || !userinfo.password || !userinfo.user_name) {
        return res.cc('用户注册信息不合法！');
    }

    // 查询是否存在相同的账号或用户名
    const sqlStr = 'SELECT * FROM hb_user WHERE user_account = ? OR user_name = ?';
    db.query(sqlStr, [userinfo.user_account, userinfo.user_name], (err, results) => {
        // 执行SQL失败
        if (err) {
            return res.cc(err.message || '数据库错误');
        }

        // 判断用户名或账号是否已存在
        if (results.length > 0) {
            const existingUser = results.find(user => user.user_account === userinfo.user_account || user.user_name === userinfo.user_name);
            if (existingUser) {
                if (existingUser.user_account === userinfo.user_account) {
                    return res.send({ status: 400, msg: '此帐号已存在！' });
                } else {
                    return res.send({ status: 400, msg: '用户名已被使用！' });
                }
            }
        }

        // 插入新用户
        const insertSql = 'INSERT INTO hb_user SET ?';
        db.query(insertSql, userinfo, (err, results) => {
            // 判断SQL语句是否执行成功
            if (err)
                return res.cc(err)

            // 判断影响行数是否为1
            if (results.affectedRows !== 1) {
                return res.cc('注册用户失败！');
            }
            // 注册用户成功
            res.send({ status: 200, msg: '注册成功！' });
        });
    });
}

//登录
exports.login = (req, res) => {
    const userinfo = req.body
    //进行表单验证
    if (!userinfo.account || !userinfo.password) return res.cc('账号或密码不能为空');

    const sql = 'SELECT * from hb_user WHERE user_account = ?';
    db.query(sql, userinfo.account, (err, results) => {
        if (err) return res.cc(err);
        if (results.length !== 1) return res.cc('账号不存在！');

        const user = results[0];
        if (user.password !== userinfo.password) return res.cc('密码错误', 500);

        //在服务端生成token
        const userToken = { ...results[0], password: '', user_image: '' }
        //对用户信息进行加密生成token
        const tokenStr = jwt.sign(userToken, config.jwtSecretKey, { expiresIn: config.expiresIn })

        res.send({
            status: 200,
            msg: '登录成功！',
            token: 'Bearer ' + tokenStr,
            name: user.user_name
        })
    });
};

// 退出登录
exports.logout = (req, res) => {
    req.session.destroy(function (err) {
        if (err) {
            res.status(500).send('退出登录失败');
        } else {
            res.send({ status: 200, msg: '退出成功！' });
        }
    });
}

